﻿' <summary>
' BeeWit IDE Entorno de desarrollo Visual para php.
' BeeWitPHP IDE es el único entorno de desarrollo para PHP 
' de tipo WYSIWYG (What You See Is What You Get). 
' ¡Ahora si!, aproveche la potencia del lenguaje PHP 
' y desarrolle más rápidamente gracias a la programación 
' intuitiva de BeeWit.
' Copyright © 2010 Dewins Murillo Garcia 
' EMAIL: dewinsmg@gmail.com
' EMAIL: dewins@beewitsoft.com
' Este Programa es Software Libre: usted puede redistribuirlo 
' y/o modificarlo bajo los términos de la Licencia Publica General 
' GNU como es publicada por la Fundacion de Software Libre; 
' en la 3ra versión de la licencia.
' Este programa es distribuido con la esperanza de que sea útil, 
' pero SIN GARANTÍA ALGUNA; sin siquiera la garantía implícita 
' de VALOR COMERCIAL o FORMADO PARA UN PROPÓSITO EN PARTICULAR. 
' Vea la Licencia Publica General GNU para mas detalles.
' Usted debe haber recibido una copia de la Licencia Publica General 
' GNU junto con este programa. Si no, vaya a http://www.beewitsoft.com
' o en http://code.google.com/p/ajax-beewit-php-ide/
' </summary>
' <remarks></remarks>

#Region "Importaciones"
Imports Microsoft.Win32
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Collections
Imports System.Diagnostics
Imports System.IO
Imports System.Xml
Imports Fireball.Windows.Forms.CodeEditor
Imports Fireball.CodeEditor.SyntaxFiles
Imports Fireball.Syntax
Imports Fireball.Windows.Forms
Imports Fireball.Plugins.Dialogs
Imports FireEdit.caret
Imports FireEdit.Dialogs
Imports Fireball.Docking
Imports FireEdit.Docking
Imports Fireball.Collections.Generic
Imports System.Text.RegularExpressions
#End Region

Public Class ctlConsole

    Private highlitedLine As Row = Nothing

    Enum enumTypeMessages
        isCRITICAL
        isWARNING
        isINFORMATION
        isEXCLAMATION
        isNOTIFICATION
        isNORMAL
    End Enum

    Public Sub AddMessages(ByVal Message As String, Optional ByVal Type As enumTypeMessages = enumTypeMessages.isNORMAL)
        txtMassages.AppendText(Message & vbCrLf)

        txtMassages.Select(txtMassages.TextLength - 1, 1)
        txtMassages.ScrollToCaret()
    End Sub

    Public Sub Compilar(ByVal TipoCompilacion As String)

        Dim key As RegistryKey = GetRegistryKey("PHP")
        Dim compilerPath As String = Application.StartupPath & "\Apache\php\php.exe" ' "C:\wamp\bin\php\php5.3.0\php.exe"
        'If key.GetValue("Compiler") Is Nothing Then
        '    compilerPath = ""
        'Else
        '    compilerPath = key.GetValue("Compiler").ToString
        'End If

        'If compilerPath = "" Then
        '    Dim opf As OpenFileDialog = New OpenFileDialog()
        '    opf.Title = "Ejecutable compilador de PHP - php.exe"
        '    opf.Filter = "PHP.exe|php.exe"
        '    If Not opf.ShowDialog() = DialogResult.OK Then
        '        Exit Sub
        '    End If
        '    compilerPath = opf.FileName
        '    key.SetValue("Compiler", compilerPath)
        'End If
        Dim Ruta As String = General.Control_Main.ActualEditor.Node.Path
        Ruta = Ruta.Replace("\", "\")
        Dim strCompile As String = " " & TipoCompilacion & " """ & Ruta & """"
        Dim info As ProcessStartInfo = New ProcessStartInfo(compilerPath, strCompile)
        info.RedirectStandardOutput = True
        info.UseShellExecute = False
        info.CreateNoWindow = True

        Dim process As Process = process.Start(info)
        process.WaitForExit()
        Dim output As String = process.StandardOutput.ReadToEnd()
        Me.txtMassages.Clear()
        Me.txtMassages.AppendText(output)

        If Not highlitedLine Is Nothing Then
            highlitedLine.BackColor = Color.White
        End If

        If process.ExitCode <> 0 Then
            ProcessError(output)
        End If

        General.Control_Main.ActualEditor._EditorControlCode.Focus()
    End Sub

    Public Sub ProcessError(ByVal errorOutput As String)
        Try
            Dim index As Integer = errorOutput.IndexOf("on line")

            If index = -1 Then
                Exit Sub
            End If

            Dim line As String = errorOutput.Substring(index + "on line".Length + 1)

            line = line.Substring(0, line.IndexOf(vbLf))

            Dim lineNumber As Integer = 0

            If Integer.TryParse(line, lineNumber) Then
                If highlitedLine IsNot Nothing Then
                    highlitedLine.BackColor = Color.White
                End If

                lineNumber -= 1

                General.Control_Main.ActualEditor._EditorControlCode.GotoLine(lineNumber)
                General.Control_Main.ActualEditor._EditorControlCode.Document(lineNumber).BackColor = Color.HotPink
                highlitedLine = General.Control_Main.ActualEditor._EditorControlCode.Document(lineNumber)

            End If
        Catch

        End Try
    End Sub


End Class
